//
//  SKTabBar.swift
//  WeiboProject
//
//  Created by yanli on 16/7/9.
//  Copyright © 2016年 mountainPassCell. All rights reserved.
//

import UIKit

// 定义代理协议
protocol SKTabBarDelegate: NSObjectProtocol {
    //定义 代理协议的方法
    func didSelectedComposeBtn()
}


class SKTabBar: UITabBar {
    
    // 定义 点击撰写按钮执行的闭包  在 SKMainViewController 调用
    var composeBtnClosure: (()->())?
    
    // 定义 代理属性,不能同名
    //  不能用delegate，因为系统里面有这个属性了,使用代理的时候也需要使用弱引用, 这个协议必须继承NSObjectProtocol否则不能使用weak
    weak var skDelegate: SKTabBarDelegate?

    //懒加载 私有 属性
    private lazy var composeBtn: UIButton = {
        //创建 UIButton
        let Btn = UIButton()
        
        //添加 UIButton 的点击事件
        Btn.addTarget(self, action: "composeBtnAction", forControlEvents: .TouchUpInside)
        
        //设置 图片
        Btn.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        Btn.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Highlighted)
        //设置 背景图片
        Btn.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: .Normal)
        Btn.setImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: .Highlighted)
        //设置 大小
        Btn.sizeToFit()
        
        return Btn
    }()

    // 重写 init 方法加载 撰写按钮 Btn
    override init(frame: CGRect) {
        super.init(frame: frame)
        //创建 Btn 加载到视图里面
        addSubview(composeBtn)
    }
    
    // 加载xib或者storyboard才会调用
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    override func layoutSubviews() {
        super.layoutSubviews()
        //设置撰写的中心点
        composeBtn.centerX = width * 0.5
        composeBtn.centerY = height * 0.5
        // 获取系统控件
        // 计算控件的宽度
        let itemWidth = width / 5
        // 记录遍历是第一个按钮
        var index = 0
        for value in subviews {
            //  这个类是私有 UITabBarButton.self 获取class
            if value.isKindOfClass(NSClassFromString("UITabBarButton")!){
                value.x = CGFloat(index) * itemWidth
                value.width = itemWidth
                if index == 1 {
                    index++
                }
                index++
            }
            
        }
    }
    
    
    // MARK: -- 点击事件
    //  因为swift是编译型语言，在编译的时候就需要知道调用哪个函数，使用private关键字修饰的函数在运行循环里面找不到，就崩溃了
    //  解决办法 使用@objc，告诉系统我们使用oc动态运行机制调用这个函数，也就是使用oc里面动态想对象派发消息，基于动态运行时
    @objc private func composeBtnAction() {
        
        //两种方式 
        //执行闭包 (首先要定义一个闭包属性)
        composeBtnClosure?()
        
        //代理调用 (在本类写一个代理协议)
        skDelegate?.didSelectedComposeBtn()
    }
    
    
}








